#include "circulo.h"
//--------------------------------------------------------------------------------------------/

circulo::circulo(SDL_Surface* screen) :	figura(screen), radio(1){}
//--------------------------------------------------------------------------------------------/

void circulo::setCentro(punto centro)
{
	this->centro = centro;
}
//--------------------------------------------------------------------------------------------/

void circulo::setRadio(float radio)
{
	this->radio = radio;
}
//--------------------------------------------------------------------------------------------/

punto& circulo::getCentro()
{
	return centro;
}
//--------------------------------------------------------------------------------------------/

float circulo::getRadio()
{
	return radio;
}
//--------------------------------------------------------------------------------------------/
void circulo::graficarRellenoCirculo()
{
	int techo,piso,radioVariable,Yentero,radioEntero;;
	color colorFondo;
	SDL_Rect recta;

	Uint32 colorRellenoFigura = SDL_MapRGB(screen->format, colorRellenoGrafico.getRojo(),colorRellenoGrafico.getVerde(), colorRellenoGrafico.getAzul());

	Yentero=(int)centro.getY();
	radioEntero=(int)radio;

	for (techo = -radioEntero, piso = radioEntero; techo<=Yentero+radioEntero; techo++,piso--)
	{
	radioVariable =(int)(sqrt(radioEntero * radioEntero - techo * techo) + 0.5);

	//flecha arriba y derecha
	recta.x =(int)centro.getX()-radioVariable;
	recta.y = Yentero + techo;
	recta.w =radioVariable+radioVariable;
	recta.h = 1;

	//arriba
	SDL_FillRect(screen, &recta, colorRellenoFigura);
	SDL_UpdateRect(screen, recta.x, recta.y, recta.w, recta.h);
	}
}


//--------------------------------------------------------------------------------------------/

void circulo::graficar()
{
	int posicion, nuevoX, nuevoY,diagonalX, diagonalY, radioEntero;
	int valorX, valorY, contadorCirculo ;
	float maximoX;

	punto unPunto;

	graficarRellenoCirculo();

	valorX=(int)centro.getX();
	valorY=(int)centro.getY();
	radioEntero=(int) radio;

	for (contadorCirculo= 0; contadorCirculo < 50; contadorCirculo++)
	{
	nuevoX = valorX;
	nuevoY = valorY +radioEntero;
	maximoX = valorX+(radioEntero / 1.4142);
	posicion=-radioEntero+1;

	while (nuevoX < maximoX)
	{
		posicion =  ((nuevoX-valorX+1)*(nuevoX-valorX+1))*2;
		posicion =((nuevoY - valorY-1)*(nuevoY- valorY-1))+posicion;
		posicion =  - 2 * radioEntero*radioEntero+ (nuevoY - valorY) * (nuevoY- valorY)+posicion;
		nuevoX = nuevoX + 1;
		if (posicion > 0)
			nuevoY = nuevoY - 1;
		else

		nuevoY = nuevoY;
		diagonalX = abs(nuevoX - valorX);
		diagonalY = abs(nuevoY - valorY);
		unPunto.ponerUnPixel(screen, valorX + diagonalY, valorY + diagonalX, colorBordeGrafico);
		unPunto.ponerUnPixel(screen, valorX + diagonalY, valorY - diagonalX, colorBordeGrafico);
		unPunto.ponerUnPixel(screen, valorX - diagonalY, valorY + diagonalX, colorBordeGrafico);
		unPunto.ponerUnPixel(screen, valorX - diagonalY, valorY - diagonalX, colorBordeGrafico);
		unPunto.ponerUnPixel(screen, nuevoX, nuevoY, colorBordeGrafico);
		unPunto.ponerUnPixel(screen, nuevoX, nuevoY - 2 * diagonalY, colorBordeGrafico);
		unPunto.ponerUnPixel(screen, nuevoX - 2 * diagonalX, nuevoY, colorBordeGrafico);
		unPunto.ponerUnPixel(screen, nuevoX - 2 * diagonalX, nuevoY - 2 * diagonalY, colorBordeGrafico);
		}
	}
}
//--------------------------------------------------------------------------------------------/

circulo::~circulo() {}
//--------------------------------------------------------------------------------------------/

